/*
Copyright (C) 2008 raohmaru <http://www.raohmaru.com>

This file is part of Raohmaru AS3 Framework.

Raohmaru AS3 Framework is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

Raohmaru AS3 Framework is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public License
along with Raohmaru AS3 Framework.  If not, see <http://www.gnu.org/licenses/>.
*/

package jp.raohmaru.collections 
{

/**
 * El iterador NullIterator permite construir clases que sean iterables pero que realmente no tienen ninguna colección.
 * Todas las operaciones retornan valores <code>null</code>, <code>false</code> o <code>0</code>.
 * @author raohmaru
 * @version 1.2
 * @source Basado en el trabajo de Joey Lott y Dany Patterson en el libro "ActionScript 3 Patrones de diseño", Ediciones Anaya Multimedia, Madrid 2008
 */
public class NullIterator implements Iterator 
{
	/**
	 *  Crea una nueva instancia de la clase NullIterator.
	 */
	public function NullIterator()
	{
		
	}
	
	/**
	 * Obtiene o define la posición del índice interno que recorre la colección de datos. El valor devuelto siempre es <code>0</code>.
	 */
    public function get position() : int
    {
        return 0;
    }
    public function set position(value :int) :void
    {
    	
    }
    
   	/**
	 * Obtiene la longitud de la matriz. Siempre devuelve <code>0</code>
	 */
    public function get count() : uint
    {
        return 0;
    }
    
   	/**
	 * @inheritDoc
	 * @return Siempre devuelve <code>false</code>
	 */
    public function get loop() : Boolean
    {
        return false;
    }
    public function set loop(value :Boolean) :void
    {
    	
    }
   
    
	/**
	 * @inheritDoc
	 * @return Siempre devuelve <code>null</code>
	 */
	public function current() :Object 
	{
		return null;
	}
	
	/**
	 * @inheritDoc
	 * @return Siempre devuelve <code>null</code>
	 */
	public function first() :Object
	{
		return null;
	}
	
	/**
	 * @inheritDoc
	 * @return Siempre devuelve <code>null</code>
	 */
	public function last() :Object
	{
		return null;
	}
	
	/**
	 * @inheritDoc
	 * @return Siempre devuelve <code>null</code>
	 */
	public function getAt(pos :uint) :Object
	{
		return null;
	}
	
	
	/**
	 * @inheritDoc
	 * @return Siempre devuelve <code>false</code>
	 */
	public function hasNext() :Boolean 
	{
		return false;
	}

	/**
	 * @inheritDoc
	 * @return Siempre devuelve <code>null</code>
	 */
	public function next() :Object 
	{
		return null;
	}
	
	/**
	 * @inheritDoc
	 * @return Siempre devuelve <code>null</code>
	 */
	public function hasPrevious() :Boolean
	{
		return false;
	}

	/**
	 * @inheritDoc
	 * @return Siempre devuelve <code>null</code>
	 */
	public function previous() :Object
	{
		return null;
	}

	/**
	 * @inheritDoc
	 * @return Siempre devuelve <code>null</code>
	 */
	public function reset() :void 
	{
	}
}
}